package com.bdf.ipharma.dao;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.bdf.ipharma.model.Lote;
import com.bdf.ipharma.model.ProductoDispenser;
import com.bdf.ipharma.model.bo.LogMovimientoStock;
import com.bdf.ipharma.model.map.ProductoStockMap;
import com.bdf.ipharma.model.map.UbicacionProductoMap;
import com.bdf.ipharma.starter.McdPrs;
import com.ibatis.sqlmap.client.SqlMapClient;

/**
 *
 * @author edw
 */
@Repository(value = "productoDao")
public class ProductoDAO extends SqlMapClientDaoSupport {

    // empty constructor
    public ProductoDAO() {
    }

    @Autowired
    public ProductoDAO(SqlMapClient sqlMapClient) {
        setSqlMapClient(sqlMapClient);
    }

    /**
     * Muestra todos los productos en la pantalla EXTRAER.
     * @return lista de Productos
     */
    public List<ProductoStockMap> selectAllProductos(String idDispenser){    	
        return getSqlMapClientTemplate().queryForList("producto.selectAllProductos", idDispenser);
    }
    
    /**
     * Muestra LA BOTONERA
     * @return Devuele la Lista de los productos para mostrar los botones, ordenados por Fila y Columna
     */
    
    public List<ProductoStockMap> getBotonera(){    	
        return getSqlMapClientTemplate().queryForList("producto.getBotonera");
    }
    
    /**
     * Muestra los lotes en el Popup
     * 
     */
    public List<Lote> getListLotes(Lote loteDescripcionSearch){    	
        return getSqlMapClientTemplate().queryForList("producto.selectLotes", loteDescripcionSearch);
    }
    
    /**
     * Reposicion de Productos 
     * @param productoDispenser: Cantidad y Medicamento seleccionado del boton
     */
    public void reponer(ProductoDispenser productoDispenser){    	
    	getSqlMapClientTemplate().update("producto.updateRepo", productoDispenser);
    }

	public ProductoDispenser getLoteById(Lote loteDescripcionSearch) {		
		return (ProductoDispenser) getSqlMapClientTemplate().queryForObject("producto.getLoteById", loteDescripcionSearch);
	}
	
	
	
	public List<UbicacionProductoMap> getUbicacionFilaColumna(UbicacionProductoMap ubicacionProductoMap){    	
        return getSqlMapClientTemplate().queryForList("producto.getUbicacionFilaColumna", ubicacionProductoMap);
    }
	
	/**
	 * VACIAR DISPENSER Y LOGUEAR
	 * */
	
	public void vaciarDispenser(LogMovimientoStock logMovimientoStock){
		getSqlMapClientTemplate().queryForObject("producto.vaciarDispenser", logMovimientoStock);
	}
	
	//#cantidad#,#idDispenser#,#tipoMovimiento#,#idUsr#,#fecha#,#idLote#, #idAsignacion#
	public void extrarProducto(LogMovimientoStock logMovimientoStock){
		logger.debug("** PARAMETROS DE EXTRACCION LOG_MOVIMIENTO **");
		
		logger.debug("CANTIDAD : " + logMovimientoStock.getCantidad());
		logger.debug("ID_DISPENSER : " + logMovimientoStock.getIdDispenser());
		logger.debug("TIPO_MOVIMIENTO : " + logMovimientoStock.getTipoMovimiento());
		logger.debug("ID_USR : " + logMovimientoStock.getIdUsr());
		logger.debug("FECHA : " + logMovimientoStock.getFecha());
		logger.debug("ID_LOTE : " + logMovimientoStock.getIdLote());
		logger.debug("ID_ASIGNACION : " + logMovimientoStock.getIdAsignacion());
		
		logger.debug("** PARAMETROS DE EXTRACCION LOG_MOVIMIENTO **");
		
		getSqlMapClientTemplate().queryForObject("producto.extrarProducto", logMovimientoStock);
	}

	public List<ProductoDispenser> getIdsAborrar(String tipodispenser) {
		return getSqlMapClientTemplate().queryForList("producto.getIdsAborrar", tipodispenser);
	}

	public void updateCantidadCero(Integer id){    	
    	getSqlMapClientTemplate().update("producto.updateCantidadCero", id);
    }

	public List<ProductoStockMap> getBotoneraSinStock() {
		Integer id = Integer.parseInt(McdPrs.tipoDispenser);
		List<ProductoStockMap> listSinStockLote = getSqlMapClientTemplate().queryForList("producto.getBotoneraSinStock", id);		
		return listSinStockLote;
	}
	
	
	public void reponerDispenser(LogMovimientoStock logMovimientoStock){
		getSqlMapClientTemplate().insert("producto.reponerDispenser", logMovimientoStock);
	}

	
}
